草庐IT

数的计数 c++

全部标签

c++ - 具有已知键数的字符串的完美哈希

当要散列的元素数量已知时,是否有可能拥有从字符串到整数的完美散列函数?我所说的完美哈希函数是指没有碰撞的机会。基本上我是从文件中读取多个表的签名(例如id、名称、地址)。不同的表可能具有共同的属性(例如名称),但位于不同的位置(即列)。我希望能够问类似这样的问题:table1["name"]是什么?或table2["name"].更新:我宁愿自己学习,也不愿使用已有的东西。 最佳答案 参见GNUgperf.GNUgperf是一个完美的散列函数生成器。对于给定的字符串列表,它以C或C++代码的形式生成哈希函数和哈希表,用于根据输入字符

c++ - 只能由函数本身写入的函数参数 - 递归计数器

所以我正在尝试编写一个递归函数来跟踪它被调用的频率。由于它的递归性质,我将无法在其中定义迭代器(或者也许可以通过指针来定义它?),因为每当函数被调用时它都会被重新定义。所以我想我可以使用函数本身的参数:intcountRecursive(intcancelCondition,intcounter=0){if(cancelCondition>0){returncountRecursive(--cancelCondition,++counter);}else{returncounter;}}现在我面临的问题是,函数的调用者可以写入counter,我想避免这种情况。话又说回来,将counte

c++ - 传递带参数的 lambda

我想将lambda传递给函数。这个boost::functionfncPtr(boost::bind([](){/*something*/}));有效,但如果lambda有一个参数,我不知道如何正确地执行它:boost::functionfncPtr(boost::bind([](bool){/*something*/},_1));不起作用。我哪里错了?如何传递带参数的lambda?我想在成员函数中执行此操作。因此,在“全局范围”(是名称吗?)中,上述方法可以正常工作。 最佳答案 这对我来说适用于GCC4.5:#include#in

c++ - OpenCV中不同 channel 数的矩阵逻辑运算

我对矩阵逻辑运算有疑问。我想对图像A和图像B使用bitwise_and以获得结果图像C。图像数据类型均为Mat,图像A经过函数处理后为3channel二值图像。图像B经过一些处理后也是二值图像,但只有1个channel。因为channel号不同,所以在做bitwise_and的时候报错。我应该如何合并channel或其他任何方法来解决这个问题?此处显示图像A、B、C: 最佳答案 您需要A和B具有相同的大小、类型和channel数。您可以使用cvtColor将3channel转换为1channel,反之亦然。这取决于您想要的C类型:M

线性代数的本质 2 线性组合、张成的空间、基

基于3Blue1Brown视频的笔记 一种新的看待方式         对于一个向量,比如说,如何看待其中的3和-2?        一开始,我们往往将其看作长度(从向量的首走到尾部,分别在x和y上走的长度)。    在有了数乘后,我们可以将其视为对向量进行缩放的标量,缩放的对象是两个特殊的向量 和 ,这两个向量也被称为xy坐标系的基向量。    也就是有:    这种把向量看作向量的数乘的和的思想正体现了数乘和相加是线性代数的核心。     这里很自然引出一个问题,可不可以换另外的向量作基向量?    比如这里我们用 和 ,想象一下任意缩放这两个向量,然后相加,得到不同的结果。    感性上

c++ - 如何编写一个快速函数来计算一个数的总除数?

我必须找到给定数字N的除数总数,其中可以大到10^14。我尝试计算最大为10^7的素数,然后使用素数的指数找到除数factors.However事实证明它太慢了,因为使用筛子找到素数需要0.03秒。如何在不计算素数的情况下更快地计算除数总数?请伪代码/很好解释的算法将不胜感激。 最佳答案 使用阿特金筛法找出所有小于10^7的素数。(其中有664,579个)http://en.wikipedia.org/wiki/Sieve_of_Atkin理想情况下,这应该在编译时完成。接下来计算质因数分解:intx;//thenumberyouw

c++ - 原子线程计数器

我正在尝试使用C++11原子原语来实现各种原子“线程计数器”。基本上,我有一个代码的关键部分。在这个代码块中,任何线程都可以自由地从内存中读取。然而,有时,我想做一个重置或清除操作,将所有共享内存重置为默认的初始化值。这似乎是一个使用读写锁的好机会。C++11不包括开箱即用的读写互斥锁,但也许可以做一些更简单的事情。我认为这个问题将是一个很好的机会来更加熟悉C++11原子原语。所以我想了一会儿这个问题,在我看来我所要做的就是:每当线程进入临界区时,递增一个原子计数器变量每当线程离开临界区时,递减原子计数器变量如果一个线程希望重置所有变量为默认值,它必须原子地等待计数器为0,然后自动将其

c++ - 使用不带参数的模板名称

我有这个代码:templateclasstemplatedclass{public:usingtype=templatedclass;};templateclasssinkstuff{public:voidprint(){coutclasssinkstuff>{public:voidprint(){coutstructpass_parameter:sinkstuff::type>{};intmain(){pass_parameterobj;obj.print();cout,typenametemplatedclass::type>::value;//1,yes}我一直认为“using指

c++ - 返回第 n 个斐波那契数的快速递归函数

谁能解释一下下面的代码是如何工作的。该代码作为返回第n个斐波那契数的函数的快速递归实现给出。我对递归函数的工作原理有一个大概的了解。我可以完全理解这种函数的直接递归实现,使用斐波那契数的定义,但是效率不高。我无法理解的主要问题是当我们在prev0中存储垃圾时fib(n–1,prev0)返回什么。intfib(intn,int&prev1){if(n我是初学者,所以请尽可能具体。 最佳答案 您可能错过了这个函数返回两个结果的事实:一个作为其返回值,一个在通过引用传递的“输入”参数中。fib的简单递归定义的严重低效之处在于,在每个递归级

c++ - 测试 C++98 字符串是否为科学计数法的数字

我有一个string变量,它可以是3种事物中的一种:一个数字一个科学记数法正文在情况1和情况3中,我不想做任何事情并传递数据。但在案例2中,我需要将其转换为常规数字。如果我总是简单地将变量转换为常规数字,那么当它包含实际文本时,它就会变为“0”。所以我需要知道字符串是否是科学计数法中的数字。显而易见的肮脏答案是这样的算法:只要看到数字就遍历字符串。如果第一个遇到的字母是“e”或“E”,然后是“+”或“-”,或者严格来说更多的数字,那么它就是科学记数法中的数字,否则它只是一个普通的数字或文本。但我认为在C++98中有更好的方法来执行此操作(无需提升)。有什么内置方法可以提供帮助吗?即使它